package com.yeban.javase.day19.test.test1;

import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @Desc TODO
 * @Author yeban
 * @Date 2025/11/3
 *
 * 1. 【客户端】输入流，从硬盘读取文件数据到程序中。
 * 2. 【客户端】输出流，写出文件数据到服务端。
 * 3. 【服务端】输入流，读取文件数据到服务端程序。
 * 4. 【服务端】输出流，写出文件数据到服务器硬盘中。
 * 5. 【服务端】获取输出流，回写数据。
 * 6. 【客户端】获取输入流，解析回写数据。
 */
public class FileServer {

    public static void main(String[] args) {
        System.out.println("---------- Server服务端 ----------");
        try {
            // 启动服务端
            ServerSocket ss = new ServerSocket(8123);
            // 等待客户端连接
            Socket socket = ss.accept();
            System.out.println("客户端连接成功~");

            // 3. 【服务端】输入流，读取文件数据到服务端程序。
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            // 4. 【服务端】输出流，写出文件数据到服务器硬盘中。
            PrintWriter pw = new PrintWriter("src/com/yeban/javase/day19/test/test1/server.txt");
            String line;
            while((line = br.readLine()) != null) {
                pw.write(line);
            }

            // 5. 【服务端】获取输出流，回写数据。
            PrintWriter back = new PrintWriter(socket.getOutputStream(),true);
            back.println("上传成功！文件已上传至服务端~");

            back.close();
            br.close();
            socket.close();
            pw.close(); // 关闭写出流，内容才会落盘
            ss.close();
            System.out.println("服务器关闭~");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
}
